//=============================================================================

#ifndef AVECTOR_H
  #define AVECTOR_H

//=============================================================================

#include <math.h>

//=============================================================================

class aVector
{
  public:
      inline const aVector& operator=(const aVector& vec)
      {
        this->x = vec.x;
        this->y = vec.y;
        this->z = vec.z;

        return (*this);
      }
      inline bool operator==(const aVector& vec)
      {
        if (fabs((this->x) - (vec.x)) < 0.0001f)
          if (fabs((this->y) - (vec.y)) < 0.0001f)
            if (fabs((this->z) - (vec.z)) < 0.0001f)
              return 1;
        
        return 0;
      }
      inline bool operator==(const aVector& vec)const
      {
        if (fabs((this->x) - (vec.x)) < 0.0001f)
          if (fabs((this->y) - (vec.y)) < 0.0001f)
            if (fabs((this->z) - (vec.z)) < 0.0001f)
              return 1;
        
        return 0;
      }
      inline bool operator!=(const aVector& vec)
      {
        if (fabs((this->x) - (vec.x)) < 0.0001f)
          if (fabs((this->y) - (vec.y)) < 0.0001f)
            if (fabs((this->z) - (vec.z)) < 0.0001f)
              return 0;

        return 1;
      }
      inline bool operator!=(const aVector& vec)const
      {
        if (fabs((this->x) - (vec.x)) < 0.0001f)
          if (fabs((this->y) - (vec.y)) < 0.0001f)
            if (fabs((this->z) - (vec.z)) < 0.0001f)
              return 0;

        return 1;
      }
      inline const aVector operator+(const aVector& vec)const
      {
        aVector tmpVector((*this));

        tmpVector.x += vec.x;
        tmpVector.y += vec.y;
        tmpVector.z += vec.z;

        return tmpVector;
      }
      inline const aVector operator-(const aVector& vec)const
      {
        aVector tmpVector((*this));

        tmpVector.x -= vec.x;
        tmpVector.y -= vec.y;
        tmpVector.z -= vec.z;

        return tmpVector;
      }
      inline const aVector operator+=(const aVector& vec)
      {
        this->x += vec.x;
        this->y += vec.y;
        this->z += vec.z;

        return (*this);
      }
      inline const aVector operator-=(const aVector& vec)
      {
        this->x -= vec.x;
        this->y -= vec.y;
        this->z -= vec.z;

        return (*this);
      }
      inline const aVector operator*(float num)const
      {
        aVector tmpVector((*this));

        tmpVector.x *= num;
        tmpVector.y *= num;
        tmpVector.z *= num;

        return tmpVector;
      }
      inline const aVector operator/(float num)const
      {
        aVector tmpVector((*this));

        tmpVector.x /= num;
        tmpVector.y /= num;
        tmpVector.z /= num;

        return tmpVector;
      }
      inline const aVector operator*=(float num)
      {
        this->x *= num;
        this->y *= num;
        this->z *= num;

        return (*this);
      }
      inline const aVector operator/=(float num)
      {
        this->x /= num;
        this->y /= num;
        this->z /= num;

        return (*this);
      }

    aVector();
    aVector(float, float, float);
    aVector(const aVector&);
      void avSet(float, float, float);
    ~aVector();

  public:
    float x, y, z;
};

//=============================================================================

#endif

//=============================================================================
